Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Dklab_Realplexor: Comet-сервер промышленного масштаба с API для PHP и JavaScript (Дмитрий Котеров)
Goto page Previous  1, 2, 3, ... 9, 10, 11  Next
Author Message
Юрий Насретдинов
Модератор



Joined: 13 Mar 2003
Posts: 8642
Карма: 197
   поощрить/наказать

Location: 007 495

PostPosted: Mon Feb 08, 2010 7:58 am (написано за 1 минуту 15 секунд)
   Post subject:
Reply with quote

Гость wrote:
Я так понимаю что для мастдая нужно использовать winsock api и выше приведённое работать не будет?
WinSock очень похож на BSD sockets (в Linux они тоже используются). В первой версии нужно было очень хорошо потрудиться, чтобы вообще найти какие-то отличия. Так что переписывать много не придется, только немного отредактировать.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Куличкин
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Feb 10, 2010 5:19 pm (спустя 2 дня 9 часов 21 минуту; написано за 6 минут 42 секунды)
   Post subject: ИЕ7
Reply with quote

У меня проблема на демо-сайте рутвита с ие7: вылетает ошибка "Permission denied" на строчке подключения гугланалитикса
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "www.");

Тобеж, как я понимаю, что-то связанное с кросс-сайт скриптингом. Обьект location, судя по всему, по причинам беопасности не проинициализирован. На нашем проекте также установлен realplexor и подобная ошибка вылетает в ИЕ7 при попытке отправить ajax запрос, на этапе инициализации странички. Используется jquery 1.4.1, ругается в строке 4896: location не проинициализирован...

remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);

Помогите разобраться, может я что-то недочитал?

P.S. FF3.5, IE8, Safari 4.0.4 - всё ок
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Feb 10, 2010 7:04 pm (спустя 1 час 45 минут; написано за 1 минуту 51 секунду)
   Post subject:
Reply with quote

Помогло добавление в мастер страницу строчки:

document.domain = document.domain;

Почерпнул её из другой статьи на дк-лаб ресурсе опять же о кросс-сайтовом джаваскрипт манипулировании. Добавьте напоминание о ней в статью о риалплексоре!
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Feb 10, 2010 9:19 pm (спустя 2 часа 14 минут; написано за 1 минуту 37 секунд)
   Post subject:
Reply with quote

вот сейчас нет api кроме как на javascript, а есть какая нибудь спецификация запросов к риалплексору?
чтобы посылалось через http запрос методом get или post?
Back to top
aleks_raiden
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sat Feb 13, 2010 3:38 pm (спустя 2 дня 18 часов 18 минут; написано за 1 минуту 8 секунд)
   Post subject: Размер сообщения
Reply with quote

Приветствую,

Вопрос следующий - есть ли ограничения на размер сообщения, которые пересылается кометом? У нас система чата (примерно) и я заметил, что если пользователь вводит большое сообщение, оно не доставляется комет-сервером.
Back to top
maxgu
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Feb 23, 2010 12:43 am (спустя 9 дней 9 часов 4 минуты; написано за 3 минуты 29 секунд)
   Post subject:
Reply with quote

Подходит ли данное решение для сервиса, где возникает много событий в сек. Например чата с большой посещаемостью. Насколько я понял при получении данных сервер обрывает соединение, а клиент его опять открывает и ждет события - это все хорошо, но сейчас у меня клиент раз в сек опрашивает сервер, а при схеме (обрывать)->(получить данные)->(открыть соединение) соединение может открываться намного чаще, чем рез в сек.
Back to top
Нумисмад
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu Feb 25, 2010 10:11 am (спустя 2 дня 9 часов 28 минут; написано за 37 секунд)
   Post subject: вопрос
Reply with quote

Ребята установил на Gentoo, при запуске ругает
логи
3024 realplexor/dklab_realplexor.conf: Error: Event::Lib library is not found in your system.
Feb 25 09:54:57 3024 realplexor/dklab_realplexor.conf: You must install libevent and Event::Lib, e.g.:
Feb 25 09:54:57 3024 realplexor/dklab_realplexor.conf: # yum install libevent-devel gcc
Feb 25 09:54:57 3024 realplexor/dklab_realplexor.conf: # perl -MCPAN -e "install Event::Lib"
Feb 25 09:54:57 3024 realplexor/dklab_realplexor.conf: - or -
Feb 25 09:54:57 3024 realplexor/dklab_realplexor.conf: # apt-get install libevent-dev gcc
Feb 25 09:54:57 3024 realplexor/dklab_realplexor.conf: # perl -MCPAN -e "install Event::Lib"
Feb 25 09:54:57 3024 realplexor/dklab_realplexor.conf: (see monkey.org/~provos/libevent/ for details)

emerge libevent
и в логах тоже самое :(
я что-то еще забыл установить в Gentoo?
заранее благодарен за ответ
Back to top
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Sat Feb 27, 2010 3:58 pm (спустя 2 дня 5 часов 46 минут; написано за 1 минуту 27 секунд)
   Post subject:
Reply with quote

maxgu wrote:
Подходит ли данное решение для сервиса, где возникает много событий в сек.
Подоходит. Кстати, если с момента предыдущего соединения клиента с реалплексором накопилось несколько сообщений, они будут отданы одной пачкой в следующем соединении. Это снижает число необходимых коннектов до минимума, недостижимого при обычной "раз-в-секундной" polling-модели.
Нумисмад wrote:
Feb 25 09:54:57 3024 realplexor/dklab_realplexor.conf: You must install libevent and Event::Lib, e.g.:
Так ниже ведь написано, как установить libevent.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Sat Feb 27, 2010 4:00 pm (спустя 1 минуту 45 секунд; написано за 54 секунды)
   Post subject:
Reply with quote

* Dklab Realplexor 2010-02-27: v1.30
  - [SPD] Use EV library (search.cpan.org/~mlehmann/EV-3.9/EV.pm)
    instead of libevent. It is faster and has no memory leaks.

Прошу протестировать. Все тесты проходят, демо-пример тоже работает, однако чем черт не шутит...

Т.к. теперь нужен модуль EV, а не libevent, его требуется установить:

perl -MCPAN -e "install EV"
Back to top
View user's profile Send private message Send e-mail
АлексейСпб
Guest





Карма: 388
   поощрить/наказать


PostPosted: Mon Mar 01, 2010 3:33 pm (спустя 1 день 23 часа 33 минуты; написано за 57 секунд)
   Post subject:
Reply with quote

Теперь после рестарта сервиса все каналы очищаются? Раньше вроде подхватывало сообщения если в буффере что-то еще было.
Back to top
АлексейСпб
Заглянувший



Joined: 01 Mar 2010
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Mon Mar 01, 2010 5:08 pm (спустя 1 час 34 минуты; написано за 5 минут 28 секунд)
   Post subject:
Reply with quote

Еще одна странная особенность: ставлю курсор при инициализации - чтобы при открытии страницы выводить все доступные в буфере старые сообщения.
Пока в буфере меньше 30 (согласно инструкции стандартная длина буфера по умолчанию - я ничего не менял) - все ок: обновляем страницу - получаем 1,2,3 или 30 сообщений в канале. Как пишем в канал 31ое сообщение - все проходит, оно отображается на клиенте, но при обновление страницы (т.е. например новый юзер открыл браузер) из буфера считываются ровно 2 сообщения. Хотя я ожидаю 30 (все кроме одного отсеченного по длине буфера самого первого). Никакие изменения курсора и пр. - не помогают. Возвращается ровно 2 сообщения, вплоть до рестарта сервиса. Причем в других каналах в этот момент все нормально (пока в них соответсвенно тоже до 30 не дойдет). Бага?

Last edited by АлексейСпб on Mon Mar 01, 2010 5:33 pm; edited 1 time in total
Back to top
View user's profile Send private message
АлексейСпб
Заглянувший



Joined: 01 Mar 2010
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Mon Mar 01, 2010 5:21 pm (спустя 12 минут; написано за 28 секунд)
   Post subject:
Reply with quote

Проверил сейчас в песочнице - результат тот же, так что похоже на багу.
Back to top
View user's profile Send private message
АлексейСпб
Заглянувший



Joined: 01 Mar 2010
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Mon Mar 01, 2010 7:43 pm (спустя 2 часа 21 минуту; написано за 41 секунду)
   Post subject:
Reply with quote

Кажется нашел в чем дело. Проблему решила замена
dklab_realplexor / Storage / DataToSend.pm
59: splice @{$this->{$id}}, 0, (@{$this->{$id}} - $max_num);
на
59: splice @{$this->{$id}}, ($max_num - @{$this->{$id}});
Back to top
View user's profile Send private message
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

Location: Россия, Санкт-Петербург

PostPosted: Wed Mar 03, 2010 1:34 pm (спустя 1 день 17 часов 51 минуту; написано за 2 минуты 15 секунд)
   Post subject:
Reply with quote

Спасибо за очередной подарок. На серверах CentOS, так что проблем нету, а вот часть разработчиков на Mac OSX работают. Есть рецепты запуска демона с launchctl? Хотя можно и без него - ультилита service тоже работает. А вот chkconfig естественно отсутствует.
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Mar 10, 2010 7:21 pm (спустя 7 дней 5 часов 46 минут; написано за 2 минуты 19 секунд)
   Post subject:
Reply with quote

Вопрос следующего характера. У нас доменом третьего уровня является сокращение текущего города: spb.domain.com к примеру. Я добавляю в nginx проксирование демона через домен comet.geometria.local и получаю в JS ошибку: ваша проверка на субдомен выкидывает эксепшен. Тоесть мне получается надо для каждого домена еще иметь comet.spb.domain.com?
Back to top
Иван Шумков
Участник форума



Joined: 30 Dec 2004
Posts: 229
Карма: 6
   поощрить/наказать

Location: Россия, Санкт-Петербург

PostPosted: Thu Mar 11, 2010 8:57 am (спустя 13 часов 36 минут; написано за 1 минуту 48 секунд)
   Post subject:
Reply with quote

Ой. В nginx я добавляю проксирование с server_name comet.domain.com.

Кстати после инициализации в JS Реалплексора перестают рабоатать визвиги. Судя по всем проблема кроется в document.domain.
Back to top
View user's profile Send private message
aleks_raiden
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sat Mar 13, 2010 10:51 pm (спустя 2 дня 13 часов 54 минуты; написано за 3 минуты 26 секунд)
   Post subject:
Reply with quote

Иван Шумков wrote:
Ой. В nginx я добавляю проксирование с server_name comet.domain.com.

Кстати после инициализации в JS Реалплексора перестают рабоатать визвиги. Судя по всем проблема кроется в document.domain.
Да, мы тоже такое заметили, проблема в том, что редакторы используют IFrame. возможно, получится решить добавив тот же код установки document.domain в тело вставляемых редактором фреймов, мы пока решили поменять редактор в проекте, благо там всего два места, где он используется, на другой, без использования фреймов. Но проблема есть.
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Mar 22, 2010 7:07 pm (спустя 8 дней 20 часов 16 минут; написано за 27 секунд)
   Post subject:
Reply with quote

можно ли получить ip для нужного мне id в мульти или реалплексоре?
Back to top
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Fri Apr 02, 2010 5:54 pm (спустя 10 дней 22 часа 46 минут; написано за 8 минут 50 секунд)
   Post subject:
Reply with quote

Дмитрий, здрасти. Можно ли как то отправлять сообщения которые не забуферизуются ?
(это нужно чтобы некоторые сообщения появлялись только 1 раз, например предупреждения пользователю)

Очень нужно, 6 лет чат был на tcl сейчас перевожу на realplexor, не хочется на клиенте делать что то подобное if (msg.notbuffer) return
бывает таких сообщений много, и если делать ифом, то тогда клиент из буфера в реальности вместо 30 сообщений покажет 10-20
Спасибо огромное Вам за труд, респект
Back to top
View user's profile Send private message
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Fri Apr 02, 2010 6:02 pm (спустя 8 минут; написано за 54 секунды)
   Post subject:
Reply with quote

АлексейСпб wrote:
Кажется нашел в чем дело. Проблему решила замена
dklab_realplexor / Storage / DataToSend.pm
59: splice @{$this->{$id}}, 0, (@{$this->{$id}} - $max_num);
на
59: splice @{$this->{$id}}, ($max_num - @{$this->{$id}});
спасибо, тоже столкнулся с таким багом
Back to top
View user's profile Send private message
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Fri Apr 02, 2010 6:15 pm (спустя 13 минут; написано за 2 минуты 47 секунд)
   Post subject:
Reply with quote

кстати еще, может добавить к <div id=realplexor> в js.api по дефолту чтобы можно было стилизовать элемент (или лучше вообще его скрыть width:0;display:none и тд),
а то если <body style=position=relative> фрейм с realplexoro'm внизу отображается, но это так мелочи жизни
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed Apr 07, 2010 9:27 am (спустя 4 дня 15 часов 12 минут; написано за 18 минут 39 секунд)
   Post subject:
Reply with quote

SLIM_newnn wrote:
 Можно ли как то отправлять сообщения которые не забуферизуются ?
сделал решение, если кому интересно:
Code (JavaScript): скопировать код в буфер обмена
        realplexor = new Dklab_Realplexor(
                "url"// URL of engine
                // namespace
                "chillout_"
        );
        // my id is my session id
        realplexor.subscribe("id_<?= session_id() ?>", function() {});
        realplexor.setCursor("main", 1);
        realplexor.subscribe("main", function(json, id, cursor) {
                msg_(json, id, cursor);
        });
        realplexor.subscribe("main_notbuf", function(json, id, cursor) {
                msg_(json, id, cursor);
        });
        realplexor.execute();
фишка в том, что мы подписываемся на 2 канала main и main_notbuf, а курсор ставим только на один
Code (JavaScript): скопировать код в буфер обмена
realplexor.setCursor("main", 1);
если нам надо отправить не буферизованное сообщение (например после нажатия ф5, чтобы оно повторно не вызывалось) мы отправляем его на main_notbuf, иначе на main :)
пример из моего кода
Code (php): скопировать код в буфер обмена
$rpl = new Dklab_Realplexor('127.0.0.1', '10010', 'chillout_');

$msg = 'not buffered msg';
$cursorId = microtime (www.php.net/microtime)(1);
$rpl->send(array (www.php.net/array)('main_notbuf' => $cursorId), $msg);

$msg = 'is buffered msg';
$cursorId = microtime (www.php.net/microtime)(1);
$rpl->send(array (www.php.net/array)('main_notbuf' => $cursorId), $msg);
Еще вопрос, можно ли как то повесить хук на событие когда пользователь установил соединение, что то типа onconnect ?
Back to top
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Wed Apr 07, 2010 9:29 am (спустя 1 минуту 17 секунд; написано за 1 минуту 14 секунд)
   Post subject:
Reply with quote

Выше сообщение мое, забыл залогиниться...
Опечатался:
Code (php): скопировать код в буфер обмена
$msg = 'is buffered msg';
$cursorId = microtime (www.php.net/microtime)(1);
$rpl->send(array (www.php.net/array)('main_notbuf' => $cursorId), $msg);
надо заменить на
Code (php): скопировать код в буфер обмена
$msg = 'is buffered msg';
$cursorId = microtime (www.php.net/microtime)(1);
$rpl->send(array (www.php.net/array)('main' => $cursorId), $msg);
Back to top
View user's profile Send private message
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Thu Apr 08, 2010 8:54 am (спустя 23 часа 25 минут; написано за 4 минуты 29 секунд)
   Post subject:
Reply with quote

При использовании примера на странице статьи cmdWatch($pos, $prefixes): слежение за онлайн-каналами (dklab.ru/lib/dklab_realplexor/#cont13): вылазиет ошибка
Code (php): скопировать код в буфер обмена
Warning: Invalid argument supplied for foreach() in Dklab/Realplexor.php on line 146
можно либо в классе добавить строку (взял из cmdOnline):
Code (php): скопировать код в буфер обмена
        public function cmdWatch($fromPos, $idPrefixes = null)
...
+                $idPrefixes = $idPrefixes !== null? (array (www.php.net/array))$idPrefixes : array (www.php.net/array)();
                // Add namespaces.
                if (strlen (www.php.net/strlen)($this->_namespace)) {
либо в демо примере:
Code (php): скопировать код в буфер обмена
-    foreach ($rpl->cmdWatch($pos, "id_") as $event) {
+    foreach ($rpl->cmdWatch($pos, array (www.php.net/array)("id_")) as $event) {
Back to top
View user's profile Send private message
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Fri Apr 09, 2010 6:19 pm (спустя 1 день 9 часов 25 минут; написано за 5 минут 19 секунд)
   Post subject:
Reply with quote

еще пару вопросов:
1. очистка всего буфера канала (послав какую то команду через php) реально ?
2. выставлять ограничения на прослушивание каналов например: невозможность открытия более двух соединений на прослушивание канала id_123123123
Back to top
View user's profile Send private message
Иванушко
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Apr 13, 2010 7:10 pm (спустя 4 дня 51 минуту; написано за 9 минут 38 секунд)
   Post subject:
Reply with quote

Добрый день.
У меня есть небольшая проблема с Реалплексором, которую я не могу никак побороть. Самое странное, что проблема появилась сегодня, после правок кода на сервере. Итак.

На стороне сервера крутится скрипт, который отправляет данные в несколько каналов с частотой раз в пять секунд. Есть страница, которая подписана на эти каналы (для обнаружения проблемы хватает и двух). При загрузке страницы она подписывается на оба канала, но данные приходят только с одного. Судя по логам Реалплексора, данные теряются где-то на сервере, точнее они приходят, но не отправляются клиенту. Если добавить больше каналов, то всё равно работает только один. Если его убрать, то работает тот, что следует за ним.

Теперь самое интересное: если на сервере возникает другое событие, пишущее данные в один из «заглохших» каналов, он внезапно прочищается и начинает работать как следует. Основное отличие в том, что это событие пишет в канал существенно больше данных, чем стандартные «ежепятисекундные» события.

Ниже логи Реалплексора, приблизительно одна итерация. Канал lot_11, как видно получил данные и тут же их отдал. Канал lot_19 данные получает, но отдавать их не спешит ) Как только в канал lot_19 поступит большое количество данных, он начинает передавать в нормальном режиме.

[Tue Apr 13 17:50:20 2010] IN: 127.0.0.1:51925: DEBUG: added data for [lot_11]
[Tue Apr 13 17:50:20 2010] <- sending 1 responses (110 bytes) from [lot_11] (print=1, shutdown=1)
[Tue Apr 13 17:50:20 2010] IN: 127.0.0.1:51925: DEBUG: connection closed
[Tue Apr 13 17:50:20 2010] WAIT: 192.168.10.195:2426: DEBUG: [1271170215.00411063300000:lot_11,(and 2 more)] connection closed
[Tue Apr 13 17:50:20 2010] IN: 127.0.0.1:60127: DEBUG: connection opened
[Tue Apr 13 17:50:20 2010] IN: 127.0.0.1:60127: DEBUG: read 122 bytes
[Tue Apr 13 17:50:20 2010] IN: 127.0.0.1:60127: DEBUG: parsed IDs
[Tue Apr 13 17:50:20 2010] IN: 127.0.0.1:60127: DEBUG: added data for [lot_19]
[Tue Apr 13 17:50:20 2010] IN: 127.0.0.1:60127: DEBUG: connection closed
[Tue Apr 13 17:50:20 2010] WAIT: 192.168.10.195:2427: DEBUG: connection opened
[Tue Apr 13 17:50:20 2010] WAIT: 192.168.10.195:2427: DEBUG: read 583 bytes
[Tue Apr 13 17:50:20 2010] WAIT: 192.168.10.195:2427: DEBUG: [1271170220.00398063600000:lot_11,(and 2 more)] registered
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:60775: DEBUG: connection opened
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:60775: DEBUG: read 95 bytes
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:60775: DEBUG: parsed IDs
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:60775: DEBUG: received aux command: ONLINE lot_
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:60775: DEBUG: connection closed
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:60775: DEBUG: sending 2 online identifiers
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:49406: DEBUG: connection opened
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:49406: DEBUG: read 121 bytes
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:49406: DEBUG: parsed IDs
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:49406: DEBUG: added data for [lot_11]
[Tue Apr 13 17:50:25 2010] <- sending 1 responses (110 bytes) from [lot_11] (print=1, shutdown=1)
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:49406: DEBUG: connection closed
[Tue Apr 13 17:50:25 2010] WAIT: 192.168.10.195:2427: DEBUG: [1271170220.00398063600000:lot_11,(and 2 more)] connection closed
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:63266: DEBUG: connection opened
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:63266: DEBUG: read 122 bytes
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:63266: DEBUG: parsed IDs
[Tue Apr 13 17:50:25 2010] IN: 127.0.0.1:63266: DEBUG: added data for [lot_19]
Back to top
Иванушко
Guest





Карма: 388
   поощрить/наказать


PostPosted: Tue Apr 13, 2010 7:31 pm (спустя 20 минут; написано за 2 минуты 7 секунд)
   Post subject:
Reply with quote

Забыл добавить один существенный момент: «нормально» данные начинают приходить только на страницах, которые уже были подписаны на канал. Как только страницу перегрузить всё повторяется. На тех же страницах, что не перегружаются данные отправляются и принимаются правильно.
Back to top
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Wed Apr 14, 2010 5:13 pm (спустя 21 час 42 минуты; написано за 1 минуту 37 секунд)
   Post subject:
Reply with quote

выложите сюда полный код сервера (как проксируете), код клиента (как подпсиываетесь) и php (как отправляете)
а желательно вообще ссылку, у меня всё работает в несколько каналов данные приходят нормально
Back to top
View user's profile Send private message
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Fri Apr 16, 2010 6:52 pm (спустя 2 дня 1 час 38 минут; написано за 10 минут 23 секунды)
   Post subject:
Reply with quote

АлексейСпб wrote:
Теперь после рестарта сервиса все каналы очищаются? Раньше вроде подхватывало сообщения если в буффере что-то еще было.
Restart очищал и раньше, и сейчас очищает. Reload - не очищает (только перечитывает конфиг).
АлексейСпб wrote:
Кажется нашел в чем дело. Проблему решила замена
dklab_realplexor / Storage / DataToSend.pm
59: splice @{$this->{$id}}, 0, (@{$this->{$id}} - $max_num);
на
59: splice @{$this->{$id}}, ($max_num - @{$this->{$id}});
По логике это совершенно правильный патч. Однако я, как ни старался, не смог воспроизвести проблему (на нее даже есть автотест в дистрибутиве с самого начала, и он срабатывает). Дело в том, что @{$this->{$id}} - это Tie::Array::Sorted, а для него, похоже, что первый splice, что второй - работают одинаково. (Я сам удивился, но проверил - и это так на моей инсталляции Perl.) То же самое и с push/unshift: обе эти функции работают одинаково для Tie::Array::Sorted.

В общем, вот патч на тему вашего сообщения:
github.com/DmitryKoterov/dklab_realplexor/commit/831381377dcfa9fb0352b2e29c4e6e023b6cdb05

Попробуйте, пожалуйста, работает ли он у вас (не вернулась ли проблема).

Вообще, я подозреваю, что воспроизводимость бага зависит от версии установленного Perl (точнее, даже от версии Tie::Array, идущего в Perl из коробки). В моей версии он не воспроизводится. После приведенного выше патча - по идее, должен перестать воспроизводиться и вообще для любой версии Perl. Проверьте.
Иван Шумков wrote:
Есть рецепты запуска демона с launchctl?
У меня - нет. Если кто-то из здесь присутствующих знает, поделитесь, пожалуйста.
Гость wrote:
Я добавляю в nginx проксирование демона через домен comet.geometria.local и получаю в JS ошибку: ваша проверка на субдомен выкидывает эксепшен. Тоесть мне получается надо для каждого домена еще иметь comet.spb.domain.com?
Попробуйте держать на comet.domain.com:

var realplexor = new Dklab_Realplexor("comet.domain.com");

Если не получится (это зависит от другого JavaScript-кода, который используется у вас на сайте), то тогда - да, на comet.spb.domain.com. Либо можно держать на spb.domain.com/realplexor (к примеру) и проксировать этот URL nginx-ом на порт Realplexor-а, но такой способ плох тем, что вы займете 1 соединение в браузере, и все остальные ресурсы будут скачиваться только через единственное оставшееся (всего браузер открывает не более 2 одновременных соединений с одним и тем же доменом).
Иван Шумков wrote:
Кстати после инициализации в JS Реалплексора перестают рабоатать визвиги. Судя по всем проблема кроется в document.domain.
Все зависит от того, насколько грамотно написано wysiwyg-редактор. Если он написан без учета того, что document.domain может меняться (а в большинстве случаев так и есть), то - может не работать. Все это зависит от класса разработчика wysiwyg-редактора в первую очередь.
SLIM_newnn wrote:
а то если <body style=position=relative> фрейм с realplexoro'm внизу отображается, но это так мелочи жизни
Почему же мелочи, не мелочи вовсе. Отличное предложение, исправил, выложил:
github.com/DmitryKoterov/dklab_realplexor/commit/0bef8a4c674a48b2e28a2d20f4d0fb81cd05056c
SLIM_newnn wrote:
При использовании примера на странице статьи cmdWatch($pos, $prefixes): слежение за онлайн-каналами: вылазиет ошибка
Да, спасибо. Исправил, выложил:
github.com/DmitryKoterov/dklab_realplexor/commit/e1007af68e36d87b131782b1a657f521d3089fef
SLIM_newnn wrote:
1. очистка всего буфера канала (послав какую то команду через php) реально ?
2. выставлять ограничения на прослушивание каналов например: невозможность открытия более двух соединений на прослушивание канала id_123123123
1. Нет. Буфер канала - не для того, чтобы в нем данные накапливать и завязывать за это какую-то логику, а для того, чтобы обеспечить возможность внезапного дисконнекта пользователя + гарантированную доставку сообщений (репликация).
2. Нет, это не предусмотрено.
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Fri Apr 16, 2010 6:53 pm (спустя 32 секунды; написано за 13 секунд)
   Post subject:
Reply with quote

* Dklab Realplexor 2010-04-16: v1.31
  - [BUG] Perl does not call flush() automatically before socket shutdown(). It
    sometimes (unstable!) causes unexpected SIGPIPEs and data loss. Fixed: now flush()
    is called manually.
  - [BUG] STATS command is not processed twice anymore.
  - [NEW] Ability to limit memory usage and auto-restart the daemon if it
    consumes too much memory. (Note that unsent data is lost during this restart.)
  - [NEW] PHP API: cmdOnlineWithCounters(): for each online ID also returns
    the number of browsers connected just now (it is NOT a "number of online
    users who listen this channel", but its approximation).
  - [BUG] Minor fixes in clean_old_data_for_id (bug is not reproduced,
    but now surrounding code is better).
  - [NEW] Visibility:hidden for IFRAME. It is good when BODY has relative position.
  - [BUG] Allow to pass a scalar to 2nd parameter of cmdWatch($fromPos, $idPrefixes).
Back to top
View user's profile Send private message Send e-mail
Дмитрий Котеров
Администратор



Joined: 10 Mar 2003
Posts: 13665
Карма: 412
   поощрить/наказать


PostPosted: Fri Apr 16, 2010 6:56 pm (спустя 3 минуты; написано за 1 минуту 17 секунд)
   Post subject:
Reply with quote

Иванушко
Попробуйте новую версию поставить, которая сегодня вышла. Возможно, это то же самое, что тут:
forum.dklab.ru/viewtopic.php?p=182858#182858

Также у реалплексора есть замечательная команда stats, которая позволяет увидеть, что и в каком состоянии лежит у него в памяти без остановки сервера:

telnet realplexor.host 10010
stats

...и пару раз нажать Enter.
Back to top
View user's profile Send private message Send e-mail
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Tue Apr 20, 2010 5:50 pm (спустя 3 дня 22 часа 54 минуты; написано за 8 минут 19 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
1. Нет. Буфер канала - не для того, чтобы в нем данные накапливать и завязывать за это какую-то логику, а для того, чтобы обеспечить возможность внезапного дисконнекта пользователя + гарантированную доставку сообщений (репликация).
а жаль, бывают случаи спама, когда засирается окно чата (флудом или спамом), нужно заблокировать акаунт, очистить буфер сообщений и ребутнуть всем окно, чтобы никто не видел ту дрянь что спамер накатал, или можно как то очистить все сообщения конкретного id_* было бы вообще супер

как быть ? где логику завязывать?

p.s. я конечно в php могу контролировать рекламные сообщения и тд, и не позволять спамить но вот когда юзверь пишет:
Quote:
[18:54:01]123123asd
[18:54:01]1234124asd
[18:54:02]asdsdf123
[18:54:02]azsdsdfsdf123
[18:54:03]asdasff123
с интервалом в секунду мне уже сложнее отличать от нормальных сообщений:
Quote:
[18:54:03]привет
[18:54:03]как дела?
[18:54:04]что делаешь ?
[18:54:04]:)
[18:54:05].ме !
у нас для этого есть специальные модеры у которых есть кнопка "очистить буфер и ребутнуть всем окно"
поверьте мне я 7 лет чатами занимаюсь, и проблема имеет место быть :(

демон с которого я решил уйти поддерживал такую команду: m_cmd("clear_history") в связи с чем у меня предложение, сложно реализовать
что то подобное в php api: cmdSend("clear_history id_channel") ?
Back to top
View user's profile Send private message
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Tue Apr 20, 2010 6:47 pm (спустя 56 минут; написано за 2 минуты 29 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
Почему же мелочи, не мелочи вовсе. Отличное предложение, исправил, выложил:
github.com/DmitryKoterov/dklab_realplexor/commit/0bef8a4c674a48b2e28a2d20f4d0fb81cd05056c
не хочу показаться занудой, но добавление ; visibility:hidden не спасает - см скрин (i015.radikal.ru/1004/7c/a5123780e29d.png)
внизу блок все равно есть, хоть и невидимый
можно для надежности добавить width: 0; height:0; display: none; top: -1000px; (видно что я их закоментил в firebug'e, с ними нет такого глюка)

а лучше всего сам слой div стилизовать, например я это делал так:
#realplexor {
    display: none;
    width: 0;
    height: 0;
    font-size: 1;
    visibility: hidden;
}
в .js <div id="realplexor"></div>
Back to top
View user's profile Send private message
SLIM_newnn
Участник форума



Joined: 29 Apr 2009
Posts: 27
Карма: 3
   поощрить/наказать

Location: нижний

PostPosted: Tue Apr 20, 2010 6:56 pm (спустя 9 минут; написано за 7 минут 12 секунд)
   Post subject:
Reply with quote

кстати еще вопрос: в мобильниках через opera mobile подписывание на realplexor не пашет, есть какие идеи ?
я так думаю писать своё приложение придется на java или каком либо Symbian, etc под конкретную мобилу, хочется и для мобил сие чудо реализовать, тогда получится та жа самая ася в телефоне с со-сайтовцами :)

я предлагаю здесь всем выкладывать свои реализации, на других языках помимо php, js , например на java, Symbian, и тд дабы остальные время сэкономили в копании грабель и API :) да и Дима я думаю с удовольствием разместит это в статье, и повысится популярность этой технологии, и как следствие feed back'ов с предложениями/багами
Back to top
View user's profile Send private message
Иванушко
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Apr 21, 2010 4:47 pm (спустя 21 час 50 минут; написано за 7 минут 7 секунд)
   Post subject:
Reply with quote

SLIM_newnn wrote:
выложите сюда полный код сервера (как проксируете), код клиента (как подпсиываетесь) и php (как отправляете)
а желательно вообще ссылку, у меня всё работает в несколько каналов данные приходят нормально
Всё делаю самым обычным образом. Просто скопипастил код со страницы Реалплексора на этом сайте.

Пример:
Code (JavaScript): скопировать код в буфер обмена
Realplexor.subscribe('lot_<?=$lot['id']?>', LotsController.lotCommander);
Code (JavaScript): скопировать код в буфер обмена
Realplexor.subscribe('TIME', function(data, id) {
        Timecontrol.tcl.set(data.tstamp);
});
Code (php): скопировать код в буфер обмена
$cron_rpl->send('TIME', array (www.php.net/array)('tstamp' => time (www.php.net/time)() - mktime (www.php.net/mktime)(0, 0, 0), 'date' => date (www.php.net/date)('H:i:s', time (www.php.net/time)())));
Code (php): скопировать код в буфер обмена
$cron_rpl->send($lot, array (www.php.net/array)('comm' => 'SYNC', 'args' => array (www.php.net/array)($lot, $left)));
Дмитрий Котеров wrote:
Иванушко
Попробуйте новую версию поставить, которая сегодня вышла. Возможно, это то же самое, что тут:
forum.dklab.ru/viewtopic.php?p=182858#182858

Также у реалплексора есть замечательная команда stats, которая позволяет увидеть, что и в каком состоянии лежит у него в памяти без остановки сервера:

telnet realplexor.host 10010
stats

...и пару раз нажать Enter.
К сожалению, апдейт не помог. Спасаюсь тем, что через пару секунд после загрузки страницы отправляю «прочищающий» запрос.
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Mon Apr 26, 2010 1:09 pm (спустя 4 дня 20 часов 22 минуты; написано за 36 секунд)
   Post subject: Установка на FreeBSD
Reply with quote

Подскажите, как установить на FreeBSD
При установке пишет: FAILED: /opt/dklab_realplexor/dklab_realplexor.conf; see logs
Back to top
АлексейСпб
Заглянувший



Joined: 01 Mar 2010
Posts: 4
Карма: 0
   поощрить/наказать


PostPosted: Mon Apr 26, 2010 2:55 pm (спустя 1 час 46 минут; написано за 11 минут 13 секунд)
   Post subject:
Reply with quote

Дмитрий Котеров wrote:
АлексейСпб wrote:
Теперь после рестарта сервиса все каналы очищаются? Раньше вроде подхватывало сообщения если в буффере что-то еще было.
Restart очищал и раньше, и сейчас очищает. Reload - не очищает (только перечитывает конфиг).
АлексейСпб wrote:
Кажется нашел в чем дело. Проблему решила замена
dklab_realplexor / Storage / DataToSend.pm
59: splice @{$this->{$id}}, 0, (@{$this->{$id}} - $max_num);
на
59: splice @{$this->{$id}}, ($max_num - @{$this->{$id}});
По логике это совершенно правильный патч. Однако я, как ни старался, не смог воспроизвести проблему (на нее даже есть автотест в дистрибутиве с самого начала, и он срабатывает). Дело в том, что @{$this->{$id}} - это Tie::Array::Sorted, а для него, похоже, что первый splice, что второй - работают одинаково. (Я сам удивился, но проверил - и это так на моей инсталляции Perl.) То же самое и с push/unshift: обе эти функции работают одинаково для Tie::Array::Sorted.

В общем, вот патч на тему вашего сообщения:
github.com/DmitryKoterov/dklab_realplexor/commit/831381377dcfa9fb0352b2e29c4e6e023b6cdb05

Попробуйте, пожалуйста, работает ли он у вас (не вернулась ли проблема).

Вообще, я подозреваю, что воспроизводимость бага зависит от версии установленного Perl (точнее, даже от версии Tie::Array, идущего в Perl из коробки). В моей версии он не воспроизводится. После приведенного выше патча - по идее, должен перестать воспроизводиться и вообще для любой версии Perl. Проверьте.
Да, проблема в новой версии исчезла.
Back to top
View user's profile Send private message
Vitaliy000
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Apr 28, 2010 12:59 pm (спустя 1 день 22 часа 3 минуты; написано за 5 минут 34 секунды)
   Post subject: Permission denied to get property Window.JsHttpRequestGlobalSource
Reply with quote

Здравствуйте.
При совместном использовании с JsHttpRequest возникает ошибка "Permission denied to get property Window.JsHttpRequestGlobalSource" при попытке передать ajax скрипту все форму по id. Отдельные значения передаются нормально. Пытался явно указывать document.domain, менять метод и загрузчик в JsHttpRequest - не помогает. Адрес realplexor'a вида rpl.site.ru, порт 80, ip отдельный.
Пожалуйста, подскажите, есть ли варианты рещения проблемы, Очень не хочется отказываться от возможности отправки целой формы.

PS: браузер FF, в других не смотрел.
Back to top
Vitaliy000
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Apr 28, 2010 3:46 pm (спустя 2 часа 47 минут; написано за 1 минуту 20 секунд)
   Post subject:
Reply with quote

Проблема решена небольшой правкой JsHttpRequest.php.

Найти:
Code (php): скопировать код в буфер обмена
$text = '<script type="text/javascript" language="JavaScript"><!--' . "\n$text" . '//--></script>';
Заменить на:
Code (php): скопировать код в буфер обмена
$text = '<script type="text/javascript" language="JavaScript"><!--' ."\n".'document.domain=document.location.host;'. "\n$text" . '//--></script>';
Back to top
Guest






Карма: 388
   поощрить/наказать


PostPosted: Wed May 05, 2010 1:17 pm (спустя 6 дней 21 час 30 минут; написано за 2 минуты 59 секунд)
   Post subject: Re: Установка на FreeBSD
Reply with quote

Anonymous wrote:
Подскажите, как установить на FreeBSD
При установке пишет: FAILED: /opt/dklab_realplexor/dklab_realplexor.conf; see logs
Если не ошибаюсь, это не смертельно. Просто говорит что отдельные конфиги не найдены.

В свою очередь у меня вопрос. Можно-ли получить список клиентов подключенных к определённому каналу? Общий список онлайн клиентов я понял как, а вот конкретно по каналу?

P.S. Дмитрий, огромное вам спасибо за ваши проекты, не первый год пользуюсь и восхищаюсь :)
Back to top
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Goto page Previous  1, 2, 3, ... 9, 10, 11  Next
Page 2 of 11    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML